package com.x.Part5_接口.USB;

/**
 * ClassName: USBTest
 * Package: IntelliJ IDEA
 * Description:接口的使用 及 接口多态性的四种使用
 * Written by HanXu
 * Create 2024.03.05 16:31
 */
public class USBTest {
    public static void main(String[] args) {

        Computer computer = new Computer();


        //一、创建接口实现类的匿名对象
        Printer printer  = new Printer();
        //USB p1  = new Printer();效果与上一样

        computer.transferDate(printer);
        //transferDate(USB usb)中传入了Printer类型的printer
        //接口的多态性
        //USB usb = new Printer() 或者 USB usb = printer

        System.out.println("******************");


        //二、创建接口实现类的“匿名对象”
        computer.transferDate(new Camera());
        //transferDate(USB usb)中传入了Camera类的实例对象
        //等同于 Camera camera = new Camera();
        //       computer.transferDate(camera);
        //接口的多态性

        System.out.println("******************");


        //三、创建接口“匿名的实现类”的对象

        //用USB()充当类使用，体现“匿名实现类”
        //但USB接口中有抽象方法，所以临时在下面重写出这些抽象方法
        USB usb = new USB() {
            @Override
            public void start() {
                System.out.println("临时的匿名实现类：USB开始");
            }
            @Override
            public void stop() {
                System.out.println("临时的匿名实现类：USB结束");
            }
        };
        computer.transferDate(usb);

        System.out.println("******************");



        //四、创建接口“匿名的实现类”的“匿名对象”

        //类名省略，用接口名代替
        //连对象名都省略了
        //重新临时重写接口中的抽象方法
        computer.transferDate(new USB() {
            @Override
            public void start() {
                System.out.println("临时的匿名实现类的匿名对象：USB开始");
            }

            @Override
            public void stop() {
                System.out.println("临时的匿名实现类的匿名对象：USB结束");
            }
        });


    }
}




class Computer{
    public void transferDate(USB usb){
        System.out.println("USB连接");
        usb.start();
        System.out.println("USB传输");
        usb.stop();
        System.out.println("USB传输结束");
    }
}

class Printer implements USB{
    @Override
    public void start() {
        System.out.println("打印机开始");
    }

    @Override
    public void stop() {
        System.out.println("打印机结束");
    }
}

class Camera implements USB{
    @Override
    public void start() {
        System.out.println("相机开始传输");
    }

    @Override
    public void stop() {
        System.out.println("相机结束传输");
    }
}

interface USB{
    //属性：全局常量

    //方法：公共抽象方法
    public abstract void start();

    void stop();
}